﻿#include "NavigationBar.h"




NavigationBar::NavigationBar(QWidget* parent)
	:QWidget(parent)
{
	init();
}

void NavigationBar::init()
{
	m_header = new QLabel;
	m_buttongroup = new QButtonGroup(this);
	m_vlayout = new QVBoxLayout(this);


	//指定了上、右、下、左四个方向的边距都为 0
	m_vlayout->setContentsMargins(0, 0, 0, 0);
	m_vlayout->setSpacing(6);

	//给布局添加窗体：
	m_vlayout->addWidget(m_header);

	//添加弹簧：	让按钮在上面，而非拉动窗口后随窗口向下移动
	m_vlayout->addStretch();

	//设置按钮组按钮互斥：
	m_buttongroup->setExclusive(true);

	m_header->setAlignment(Qt::AlignCenter);		//设置标题文本的居中对齐
	//设置标题字体大小：
	auto font = m_header->font();
	font.setPointSize(12);
	m_header->setFont(font);

	//设置了窗口部件（QWidget）的属性，使其支持使用样式表设置背景样式:
	setAttribute(Qt::WA_StyledBackground);			//可以使用样式表对窗口部件的背景颜色和其他外观属性进行定制和设置
	//设置样式表的内容，其中使用了原始字符串字面值（Raw String Literal）来包裹样式表的内容，这样可以在字符串中直接包含特殊字符而无需转义:
	setStyleSheet(R"(QWidget{background-color:rgb(28,28,28)}
							QPushButton{border:none;color:white}
							QLabel{border:none;color:rgb(115,251,253)}			
							QPushButton:hover{background-color:rgb(60,60,60)}
							QPushButton:checked{background-color:rgb(255,0,0)})");	//border: none; ——去除按钮和标签的边框；




	connect(m_buttongroup, &QButtonGroup::idClicked, this, &NavigationBar::idClicked);
	connect(m_buttongroup, &QButtonGroup::buttonClicked, this, &NavigationBar::buttonClicked);
}

void NavigationBar::addNavigation(const QString& text, int id)
{
	addNavigation(QIcon(), text, id);
}

void NavigationBar::addNavigation(const QIcon& icon, const QString& text, int id)
{
	//自动排序设计：
	if (-1 == id)
	{
		id = m_lastId++;
	}


	auto btn = new QPushButton(icon, text);
	//设置按钮的高度为30像素：
	btn->setFixedHeight(30);
	//设置按钮可以给点击：
	btn->setCheckable(true);
	m_buttongroup->addButton(btn, id);

	//使用插入，而非添加（append），是因为让按钮插入在弹簧的前面，实现弹簧在最下面的效果：插入在最后一个元素之前的位置
	m_vlayout->insertWidget(m_vlayout->count() - 1, btn);
}

QPushButton* NavigationBar::Navigation(int id)
{
	auto button = m_buttongroup->button(id);
	if (!button)
	{
		return nullptr;
	}

	//返回这个按钮的指针：
	return dynamic_cast<QPushButton*>(button);
}

void NavigationBar::setHeader(const QString& text)
{
	m_header->setText(text);
}


